import 'dart:convert';

import 'package:dio/dio.dart';
import 'package:ymApp/common/global.dart';

class HttpRequest {
  // 基础配置；
  static final BaseOptions httpBaseOptions = BaseOptions(
      baseUrl: 'http://192.168.1.8:3000/api', connectTimeout: 5000);

  static final Dio dio = Dio(httpBaseOptions);

  static init () {
//    dio.interceptors.add(LogInterceptor(responseBody: false)); //开启请求日志

  }


  static Future<Response<T>> request<T>(String url,
      {String method = 'post', // 默认为post请求
      Map<String, dynamic> params,
      Interceptor inter}) async {
    // 创建局部请求配置
    final Options options = Options(method: method);

    dio.interceptors
        .add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
      // 添加token

      String token = Global.prefs.getString('token');
      options.headers['authorization'] = token;

      // 在请求被发送之前做一些事情
      return options; //continue
      // 如果你想完成请求并返回一些自定义数据，可以返回一个`Response`对象或返回`dio.resolve(data)`。
      // 这样请求将会被终止，上层then会被调用，then中返回的数据将是你的自定义数据data.
      //
      // 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象，或返回`dio.reject(errMsg)`，
      // 这样请求将被中止并触发异常，上层catchError会被调用。
    }, onResponse: (Response response) async {
      // 在返回响应数据之前做一些预处理
      print('response 响应拦截');
      return response; // continue
    }, onError: (DioError e) async {
      // 当请求失败时做一些预处理
      return e; //continue
    }));

    // 发送网络请求
    try {
      Response<T> response =
          await dio.request<T>(url, queryParameters: params, options: options);
      return response;
    } on DioError catch (e) {
      print(e);
      return Future.error(e);
    }
  }
}
